#include <dlfcn.h>
#include "utils/common.h"

namespace chelper {
namespace utils {
    
bool Common::is_number(const char *str_num) {
    if (str_num == nullptr) {
        return false;
    }
    bool is_num = strspn(str_num, "-.0123456789") == strlen(str_num);
    if (!is_num) {
        return is_num;
    }
    is_num &= strchr(str_num, '.') == strrchr(str_num, '.');
    is_num &= strchr(str_num, '-') == strrchr(str_num, '-');
    return is_num;
}

bool Common::is_number(const std::string &str_num) {
    return !str_num.empty() && std::regex_match(str_num, std::regex("^([-|+])?[0-9]*\\.?[0-9]*$"));
}

std::string Common::get_library_path(void *library_method) {
    Dl_info dl_info;
    if(0 != dladdr(library_method, &dl_info))
        return std::string(dl_info.dli_fname);
    else
        return std::string();
}

}  // namespace utils
}  // namespace chelper